// pages/profile/profile.js
const app = getApp();
const galleryApi = require('../../api/galleryApi');

Page({
  /**
   * 页面的初始数据
   */
  data: {
    isLogin: false,         // 登录状态
    userInfo: null,         // 用户信息
    userId: '',             // 用户ID
    activeTab: 0,           // 当前选中的标签页：0-我的作品，1-我的收藏，2-我的点赞
    showStyleCards: false,   // 是否显示风格卡片，默认显示作品列表
    contentList: [],        // 内容列表
    pageNum: 1,             // 当前页码
    pageSize: 10,           // 每页数量
    loading: false,         // 加载状态
    hasMore: true,          // 是否还有更多数据
    refreshing: false,      // 下拉刷新状态
    tabList: ['我的作品', '我的收藏', '我的点赞'],
    menuVisible: false,      // 添加更多操作菜单的数据
    menuItems: [
      { title: '设置', icon: 'setting' },
      { title: '意见反馈', icon: 'chat' },
      { title: '客服咨询', icon: 'service' },
      { title: '注销登录', icon: 'poweroff', textColor: '#E34D59' }
    ],
    dbInitializing: false,   // 数据库初始化状态
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    console.log('个人页面加载');
    // 检查登录状态
    const isLogin = this.checkLoginStatus();
    
    // 如果已登录，获取用户信息和统计数据
    if (isLogin) {
      this.getUserInfo();
      this.resetContentList();
      this.fetchContent();
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    console.log('个人页面显示');
    // 检查登录状态
    const isLogin = this.checkLoginStatus();
    
    // 如果已登录，则获取最新的用户信息和统计数据
    if (isLogin) {
      // 获取用户信息，如果之前没有获取过
      if (!this.data.userInfo) {
        this.getUserInfo();
      }
      
      // 获取内容列表，如果之前没有获取过
      if (this.data.contentList.length === 0) {
        this.resetContentList();
        this.fetchContent();
      }
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    if (!this.data.isLogin) {
      wx.stopPullDownRefresh();
      return;
    }
    
    this.setData({ refreshing: true });
    this.getUserInfo();
    this.resetContentList();
    this.fetchContent();
    
    // 停止下拉刷新
    wx.stopPullDownRefresh();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    if (this.data.isLogin && this.data.hasMore && !this.data.loading && !this.data.showStyleCards) {
      this.fetchContent();
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: '欢迎体验AI图像创作',
      path: '/pages/gallery/gallery'
    };
  },

  /**
   * 检查登录状态
   */
  checkLoginStatus: function () {
    // 先从全局变量获取登录状态
    let isLogin = app.globalData.isLogin;
    let userInfo = app.globalData.userInfo;
    
    // 如果全局变量中没有登录状态，则尝试从本地存储恢复
    if (!isLogin || !userInfo) {
      // 从本地存储恢复登录状态
      const storedUserInfo = wx.getStorageSync('userInfo');
      if (storedUserInfo) {
        userInfo = JSON.parse(storedUserInfo);
        isLogin = true;
        
        // 更新全局变量
        app.globalData.isLogin = true;
        app.globalData.userInfo = userInfo;
        
        console.log('从本地存储恢复登录状态');
      }
    }
    
    this.setData({
      isLogin: isLogin,
      userInfo: userInfo,
      userId: userInfo ? userInfo._id || userInfo._openid : ''
    });
    
    console.log('当前登录状态：', isLogin);
    console.log('当前用户信息：', userInfo);

    return isLogin;
  },

  /**
   * 获取用户信息
   */
  getUserInfo: function() {
    if (!this.data.isLogin) {
      return;
    }

    wx.showLoading({
      title: '加载中...',
      mask: true
    });

    // 调用云函数获取用户信息
    this.fetchUserInfo()
      .then(userInfo => {
        // 更新全局数据
        app.globalData.userInfo = userInfo;
        
        // 将最新的用户信息保存到本地存储
        wx.setStorageSync('userInfo', JSON.stringify(userInfo));
        
        // 更新页面数据
        this.setData({
          userInfo: userInfo,
          userId: userInfo._id || userInfo._openid,
          refreshing: false,
          loading: false
        });
        
        wx.hideLoading();
      })
      .catch(err => {
        console.error('获取用户数据失败:', err);
        wx.showToast({
          title: '获取用户数据失败',
          icon: 'none'
        });
        
        this.setData({
          refreshing: false,
          loading: false
        });
        
        wx.hideLoading();
      });
  },
  
  /**
   * 获取用户基本信息
   */
  fetchUserInfo: function() {
    return new Promise((resolve, reject) => {
      // 调用云函数获取用户信息
      wx.cloud.callFunction({
        name: 'getUserInfo',
        success: res => {
          console.log('获取用户信息成功:', res.result);
          if (res.result && res.result.success && res.result.data && res.result.data.userInfo) {
            resolve(res.result.data.userInfo);
          } else {
            reject(new Error(res.result.message || '获取用户信息失败'));
          }
        },
        fail: err => {
          console.error('调用getUserInfo云函数失败:', err);
          reject(err);
        }
      });
    });
  },

  /**
   * 去登录页面
   */
  goToLogin: function () {
    wx.getUserProfile({
      desc: '用于完善会员资料',
      success: (res) => {
        wx.showLoading({
          title: '登录中...',
        });
        
        // 获取用户信息成功后，调用登录方法获取openid
        app.login()
          .then(result => {
            // 组装用户信息
            const userInfo = {
              nickName: res.userInfo.nickName,
              avatarUrl: res.userInfo.avatarUrl,
              gender: res.userInfo.gender,
              country: res.userInfo.country,
              province: res.userInfo.province,
              city: res.userInfo.city,
              openid: result.openid
            };
            
            // 直接调用注册方法
            return app.register(userInfo);
          })
          .then(result => {
            wx.hideLoading();
            
            // 保存用户信息到全局变量和本地存储
            app.globalData.isLogin = true;
            app.globalData.userInfo = result;
            
            // 将用户信息保存到本地存储，以便下次启动时恢复登录状态
            wx.setStorageSync('userInfo', JSON.stringify(result));
            
            this.setData({
              isLogin: true,
              userInfo: result,
              userId: result._id || result._openid || ''
            });
            
            // 获取用户信息
            this.getUserInfo();
            
            wx.showToast({
              title: '登录成功',
              icon: 'success'
            });
          })
          .catch(err => {
            wx.hideLoading();
            console.error('登录失败', err);
            wx.showToast({
              title: '登录失败，请重试',
              icon: 'none'
            });
          });
      },
      fail: (err) => {
        console.error('获取用户信息失败', err);
        wx.showToast({
          title: '获取用户信息失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 切换标签页
   */
  switchTab: function(e) {
    const index = e.currentTarget.dataset.index;
    
    if (this.data.activeTab !== index) {
      this.setData({
        activeTab: index,
        showStyleCards: false
      });
      
      this.resetContentList();
      this.fetchContent();
    }
  },

  /**
   * 重置内容列表
   */
  resetContentList: function() {
    this.setData({
      contentList: [],
      pageNum: 1,
      hasMore: true
    });
  },

  /**
   * 获取内容列表
   */
  fetchContent: function() {
    // 如果正在加载或没有更多数据，则不继续加载
    if (this.data.loading || !this.data.hasMore) {
      return;
    }
    
    // 更新加载状态
    this.setData({ loading: true });
    
    // 根据当前选中的标签页获取不同类型的内容
    switch (this.data.activeTab) {
      case 0:
        // 获取我的作品
        this.fetchMyWorks();
        break;
        
      case 1:
        // 获取我的收藏
        this.fetchMyCollections();
        break;
        
      case 2:
        // 获取我点赞
        this.fetchMyLikedWorks();
        break;
        
      default:
        this.setData({ loading: false });
        break;
    }
  },

  /**
   * 获取我的作品
   */
  fetchMyWorks: function() {
    console.log('获取我的作品，页码：', this.data.pageNum);
    wx.cloud.callFunction({
      name: 'gallery',
      data: {
        action: 'getUserImages',
        params: {
          userId: '',  // 空表示当前用户
          page: this.data.pageNum,
          limit: this.data.pageSize
        }
      },
      success: res => {
        console.log('获取我的作品成功:', res.result);
        if (res.result && res.result.success) {
          this.handleContentResult(res.result);
        } else {
          this.handleFetchError(res.result?.message || '获取作品失败');
        }
      },
      fail: err => {
        console.error('获取我的作品失败:', err);
        this.handleFetchError('获取作品失败，请重试');
      }
    });
  },

  /**
   * 获取我的收藏
   */
  fetchMyCollections: function() {
    console.log('获取我的收藏，页码：', this.data.pageNum);
    wx.cloud.callFunction({
      name: 'gallery',
      data: {
        action: 'getUserCollections',
        params: {
          page: this.data.pageNum,
          limit: this.data.pageSize
        }
      },
      success: res => {
        console.log('获取我的收藏成功:', res.result);
        if (res.result && res.result.success) {
          this.handleContentResult(res.result);
        } else {
          this.handleFetchError(res.result?.message || '获取收藏失败');
        }
      },
      fail: err => {
        console.error('获取我的收藏失败:', err);
        this.handleFetchError('获取收藏失败，请重试');
      }
    });
  },

  /**
   * 获取我点赞的作品
   */
  fetchMyLikedWorks: function() {
    console.log('获取我点赞的作品，页码：', this.data.pageNum);
    wx.cloud.callFunction({
      name: 'gallery',
      data: {
        action: 'getUserLikedImages',
        params: {
          page: this.data.pageNum,
          limit: this.data.pageSize
        }
      },
      success: res => {
        console.log('获取我点赞的作品成功:', res.result);
        if (res.result && res.result.success) {
          this.handleContentResult(res.result);
        } else {
          this.handleFetchError(res.result?.message || '获取点赞作品失败');
        }
      },
      fail: err => {
        console.error('获取我点赞的作品失败:', err);
        this.handleFetchError('获取点赞作品失败，请重试');
      }
    });
  },

  /**
   * 处理获取内容错误
   */
  handleFetchError: function(message) {
    this.setData({
      loading: false,
      refreshing: false
    });
    
    wx.showToast({
      title: message,
      icon: 'none'
    });
  },

  /**
   * 处理内容结果
   */
  handleContentResult: function(res) {
    // 如果没有数据或数据长度为0，则表示没有更多数据
    if (!res.data || !res.data.list || res.data.list.length === 0) {
      this.setData({
        loading: false,
        refreshing: false,
        hasMore: false
      });
      return;
    }
    
    // 格式化时间和处理图片URL
    const list = res.data.list.map(item => {
      // 处理时间格式
      let formatTime = '';
      if (item.createTime) {
        if (typeof item.createTime === 'string') {
          formatTime = this.formatTime(new Date(item.createTime));
        } else if (item.createTime.seconds) {
          // 处理Firestore时间戳
          formatTime = this.formatTime(new Date(item.createTime.seconds * 1000));
        } else {
          formatTime = this.formatTime(item.createTime);
        }
      }
      
      return {
        ...item,
        id: item._id,
        coverUrl: item.fileID,
        title: item.title || '无标题',
        description: item.description || '暂无描述',
        likes: item.likeCount || 0,
        formatTime: formatTime
      };
    });
    
    // 更新数据
    this.setData({
      contentList: [...this.data.contentList, ...list],
      pageNum: this.data.pageNum + 1,
      hasMore: list.length >= this.data.pageSize,
      loading: false,
      refreshing: false
    });
  },

  /**
   * 格式化时间
   */
  formatTime: function(time) {
    if (!time) return '';
    
    const date = new Date(time);
    return `${date.getFullYear()}-${this.padZero(date.getMonth() + 1)}-${this.padZero(date.getDate())}`;
  },

  /**
   * 补零
   */
  padZero: function(num) {
    return num < 10 ? '0' + num : num;
  },

  /**
   * 查看详情
   */
  viewDetail: function(e) {
    const id = e.currentTarget.dataset.id;
    
    wx.navigateTo({
      url: `/pages/detail/detail?id=${id}`
    });
  },

  /**
   * 跳转到编辑资料页面
   */
  goToEditProfile: function() {
    wx.navigateTo({
      url: '/pages/edit-profile/edit-profile'
    });
  },

  /**
   * 显示操作菜单
   */
  showMenu: function() {
    this.setData({
      menuVisible: true
    });
  },

  /**
   * 关闭操作菜单
   */
  closeMenu: function() {
    this.setData({
      menuVisible: false
    });
  },

  /**
   * 处理菜单点击
   */
  handleMenuClick: function(e) {
    const { item, index } = e.detail;
    
    console.log('点击菜单项', item, index);
    
    switch (index) {
      case 0:
        // 设置
        wx.navigateTo({
          url: '/pages/settings/settings'
        });
        break;
        
      case 1:
        // 意见反馈
        wx.navigateTo({
          url: '/pages/feedback/feedback'
        });
        break;
        
      case 2:
        // 客服咨询
        wx.navigateTo({
          url: '/pages/customer-service/customer-service'
        });
        break;
        
      case 3:
        // 注销登录
        this.logout();
        break;
    }
    
    this.closeMenu();
  },

  /**
   * 注销登录
   */
  logout: function() {
    wx.showModal({
      title: '确认注销',
      content: '确定要注销当前登录吗？',
      success: (res) => {
        if (res.confirm) {
          // 调用app的logout方法
          app.logout();
          
          // 清除本地存储的用户信息
          wx.removeStorageSync('userInfo');
          
          this.setData({
            isLogin: false,
            userInfo: null,
            userId: '',
            stats: {
              works: 0,
              collections: 0,
              likes: 0
            },
            contentList: []
          });
          
          wx.showToast({
            title: '已注销登录',
            icon: 'success'
          });
        }
      }
    });
  },

  /**
   * 初始化用户统计数据库
   */
  initUserStats: function() {
    if (!this.data.isLogin || this.data.dbInitializing) {
      return;
    }
    
    this.setData({ 
      dbInitializing: true,
      statsLoading: true,
      statsError: false,
      statsErrorMsg: ''
    });
    
    wx.showLoading({
      title: '初始化中...',
      mask: true
    });
    
    // 调用初始化云函数
    wx.cloud.callFunction({
      name: 'initUserStats',
      success: res => {
        console.log('初始化数据库成功:', res.result);
        
        // 初始化成功后刷新统计数据
        this.fetchUserStats().then(stats => {
          // 更新统计数据更新时间
          const now = new Date();
          const updateTime = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}`;
          
          this.setData({
            stats: stats,
            statsLoading: false,
            dbInitializing: false,
            statsUpdateTime: updateTime
          });
          
          wx.hideLoading();
          
          wx.showToast({
            title: '初始化成功',
            icon: 'success',
            duration: 2000
          });
        }).catch(err => {
          console.error('初始化后获取统计数据失败:', err);
          
          this.setData({
            statsLoading: false,
            dbInitializing: false
          });
          
          wx.hideLoading();
          
          wx.showToast({
            title: '初始化成功，但数据加载失败',
            icon: 'none',
            duration: 2000
          });
        });
      },
      fail: err => {
        console.error('初始化数据库失败:', err);
        
        this.setData({
          statsLoading: false,
          dbInitializing: false,
          statsError: true,
          statsErrorMsg: '初始化失败，请重试'
        });
        
        wx.hideLoading();
        
        wx.showToast({
          title: '初始化失败',
          icon: 'none',
          duration: 2000
        });
      }
    });
  },
});